Stop using gdk_event_get_target
authorMatthias Clasen <mclasen@redhat.com>
Sun, 16 Feb 2020 07:47:39 +0000 (02:47 -0500)
committerMatthias Clasen <mclasen@redhat.com>
Fri, 21 Feb 2020 05:51:02 +0000 (00:51 -0500)
We can now get the target widget from the gesture
that we are using to find the event in the first
place.

gtk/gtkscrolledwindow.c
gtk/gtkwidget.c
gtk/gtkwindow.c

index c11abc1f0bd6841883f49222e45cb770095d9555..195c110bbdb57cb7618b8a039105addc633de8d4 100644 (file)
@@ -851,15 +851,13 @@ scrolled_window_drag_begin_cb (GtkScrolledWindow *scrolled_window,
   GtkEventSequenceState state;
   GdkEventSequence *sequence;
   GtkWidget *event_widget;
-  const GdkEvent *event;
 
   priv->in_drag = FALSE;
   priv->drag_start_x = priv->unclamped_hadj_value;
   priv->drag_start_y = priv->unclamped_vadj_value;
   gtk_scrolled_window_cancel_deceleration (scrolled_window);
   sequence = gtk_gesture_single_get_current_sequence (GTK_GESTURE_SINGLE (gesture));
-  event = gtk_gesture_get_last_event (gesture, sequence);
-  event_widget = GTK_WIDGET (gdk_event_get_target (event));
+  event_widget = gtk_gesture_get_last_target (gesture, sequence);
 
   if (event_widget == priv->vscrollbar || event_widget == priv->hscrollbar ||
       (!may_hscroll (scrolled_window) && !may_vscroll (scrolled_window)))
index 6f436a27512191057625d3fc1af33a67fba6a423..0dd15f9ef717027915f235caeac23cc7f3e92e82 100644 (file)
@@ -2064,15 +2064,14 @@ gtk_widget_get_property (GObject         *object,
 
 static void
 _gtk_widget_emulate_press (GtkWidget      *widget,
-                           const GdkEvent *event)
+                           const GdkEvent *event,
+                           GtkWidget      *event_widget)
 {
-  GtkWidget *event_widget, *next_child, *parent;
+  GtkWidget *next_child, *parent;
   GdkEvent *press;
   gdouble x, y;
   graphene_point_t p;
 
-  event_widget = GTK_WIDGET (gdk_event_get_target (event));
-
   if (event_widget == widget)
     return;
 
@@ -2156,8 +2155,9 @@ _gtk_widget_emulate_press (GtkWidget      *widget,
 }
 
 static const GdkEvent *
-_gtk_widget_get_last_event (GtkWidget        *widget,
-                            GdkEventSequence *sequence)
+_gtk_widget_get_last_event (GtkWidget         *widget,
+                            GdkEventSequence  *sequence,
+                            GtkWidget        **target)
 {
   GtkWidgetPrivate *priv = gtk_widget_get_instance_private (widget);
   GtkEventController *controller;
@@ -2171,12 +2171,15 @@ _gtk_widget_get_last_event (GtkWidget        *widget,
       if (!GTK_IS_GESTURE (controller))
         continue;
 
-      event = gtk_gesture_get_last_event (GTK_GESTURE (controller),
-                                          sequence);
+      event = gtk_gesture_get_last_event (GTK_GESTURE (controller), sequence);
       if (event)
-        return event;
+        {
+          *target = gtk_gesture_get_last_target (GTK_GESTURE (controller), sequence);
+          return event;
+        }
     }
 
+  *target = NULL;
   return NULL;
 }
 
@@ -2193,8 +2196,9 @@ _gtk_widget_get_emulating_sequence (GtkWidget         *widget,
   if (sequence)
     {
       const GdkEvent *last_event;
+      GtkWidget *target;
 
-      last_event = _gtk_widget_get_last_event (widget, sequence);
+      last_event = _gtk_widget_get_last_event (widget, sequence, &target);
 
       if (last_event &&
           (last_event->any.type == GDK_TOUCH_BEGIN ||
@@ -2264,6 +2268,7 @@ _gtk_widget_set_sequence_state_internal (GtkWidget             *widget,
   GtkWidgetPrivate *priv = gtk_widget_get_instance_private (widget);
   gboolean emulates_pointer, sequence_handled = FALSE;
   const GdkEvent *mimic_event;
+  GtkWidget *target;
   GList *group = NULL, *l;
   GdkEventSequence *seq;
   gint n_handled = 0;
@@ -2275,7 +2280,7 @@ _gtk_widget_set_sequence_state_internal (GtkWidget             *widget,
     group = gtk_gesture_get_group (emitter);
 
   emulates_pointer = _gtk_widget_get_emulating_sequence (widget, sequence, &seq);
-  mimic_event = _gtk_widget_get_last_event (widget, seq);
+  mimic_event = _gtk_widget_get_last_event (widget, seq, &target);
 
   for (l = priv->event_controllers; l; l = l->next)
     {
@@ -2338,7 +2343,7 @@ _gtk_widget_set_sequence_state_internal (GtkWidget             *widget,
   if (n_handled > 0 && sequence_handled &&
       state == GTK_EVENT_SEQUENCE_DENIED &&
       gtk_widget_needs_press_emulation (widget, sequence))
-    _gtk_widget_emulate_press (widget, mimic_event);
+    _gtk_widget_emulate_press (widget, mimic_event, target);
 
   g_list_free (group);
 
@@ -11919,13 +11924,11 @@ gtk_widget_cancel_event_sequence (GtkWidget             *widget,
   if (!handled || state != GTK_EVENT_SEQUENCE_CLAIMED)
     return;
 
-  event = _gtk_widget_get_last_event (widget, sequence);
+  event = _gtk_widget_get_last_event (widget, sequence, &event_widget);
 
   if (!event)
     return;
 
-  event_widget = GTK_WIDGET (gdk_event_get_target (event));
-
   while (event_widget)
     {
       if (event_widget == widget)
index 97a51e720b58ffd4bb4d492b1f410571d22947af..fa0c50706ae1a3c8c2a3e6b787dda25c1a772f1c 100644 (file)
@@ -1508,8 +1508,7 @@ drag_gesture_update_cb (GtkGestureDrag *gesture,
 
       if (gtk_event_controller_get_propagation_phase (GTK_EVENT_CONTROLLER (gesture)) == GTK_PHASE_CAPTURE)
         {
-          const GdkEvent *event = gtk_gesture_get_last_event (GTK_GESTURE (gesture), sequence);
-          GtkWidget *event_widget = GTK_WIDGET (gdk_event_get_target (event));
+          GtkWidget *event_widget = gtk_gesture_get_last_target (GTK_GESTURE (gesture), sequence);
 
           /* Check whether the target widget should be left alone at handling
            * the sequence, this is better done late to give room for gestures